<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>xilpuf: XilPuf APIs</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="HTML_custom.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="xlogo_bg.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">xilpuf
   </div>
   <div id="projectbrief">Vitis Drivers API Documentation</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Overview</span></a></li>
      <li><a href="globals.html"><span>APIs</span></a></li>
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;"
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__xpuf__apis.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#define-members">Macros</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">XilPuf APIs</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:ga8eda4f7307742eae0ea34465e43d2555"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#ga8eda4f7307742eae0ea34465e43d2555">XPUF_STATUS_WAIT_TIMEOUT</a>&#160;&#160;&#160;(1000000U)</td></tr>
<tr class="memdesc:ga8eda4f7307742eae0ea34465e43d2555"><td class="mdescLeft">&#160;</td><td class="mdescRight">Recommended software timeout is 1 second.  <a href="#ga8eda4f7307742eae0ea34465e43d2555">More...</a><br/></td></tr>
<tr class="separator:ga8eda4f7307742eae0ea34465e43d2555"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4d7d5a3b73fb92f6f65e2a2205b74195"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#ga4d7d5a3b73fb92f6f65e2a2205b74195">XPUF_AUX_MASK_VALUE</a>&#160;&#160;&#160;(0x0FFFFFF0U)</td></tr>
<tr class="memdesc:ga4d7d5a3b73fb92f6f65e2a2205b74195"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mask value for AUX.  <a href="#ga4d7d5a3b73fb92f6f65e2a2205b74195">More...</a><br/></td></tr>
<tr class="separator:ga4d7d5a3b73fb92f6f65e2a2205b74195"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5a9afe10c38f97cc7f9793a02463c131"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#ga5a9afe10c38f97cc7f9793a02463c131">XPUF_OV_MASK_VALUE</a>&#160;&#160;&#160;(0x30000000U)</td></tr>
<tr class="memdesc:ga5a9afe10c38f97cc7f9793a02463c131"><td class="mdescLeft">&#160;</td><td class="mdescRight">Mask value for overflow.  <a href="#ga5a9afe10c38f97cc7f9793a02463c131">More...</a><br/></td></tr>
<tr class="separator:ga5a9afe10c38f97cc7f9793a02463c131"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga4f2ca82dfad78d3aa3ec21f1485031de"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#ga4f2ca82dfad78d3aa3ec21f1485031de">XPUF_RESET_VAL</a>&#160;&#160;&#160;(1U)</td></tr>
<tr class="memdesc:ga4f2ca82dfad78d3aa3ec21f1485031de"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF reset value.  <a href="#ga4f2ca82dfad78d3aa3ec21f1485031de">More...</a><br/></td></tr>
<tr class="separator:ga4f2ca82dfad78d3aa3ec21f1485031de"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2ef4268fecfb9ad20b85bbb41205945f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#ga2ef4268fecfb9ad20b85bbb41205945f">XPUF_SET_VAL</a>&#160;&#160;&#160;(0U)</td></tr>
<tr class="memdesc:ga2ef4268fecfb9ad20b85bbb41205945f"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF set value.  <a href="#ga2ef4268fecfb9ad20b85bbb41205945f">More...</a><br/></td></tr>
<tr class="separator:ga2ef4268fecfb9ad20b85bbb41205945f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad94270d88964f053f5b2d36349ce70a1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#gad94270d88964f053f5b2d36349ce70a1">XPUF_PUF_AUX_ENABLE</a>&#160;&#160;&#160;(0xFU)</td></tr>
<tr class="memdesc:gad94270d88964f053f5b2d36349ce70a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF aux enable.  <a href="#gad94270d88964f053f5b2d36349ce70a1">More...</a><br/></td></tr>
<tr class="separator:gad94270d88964f053f5b2d36349ce70a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa36ee96f0b6371026d93d658d9993262"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#gaa36ee96f0b6371026d93d658d9993262">XPUF_PUF_IC_MASK</a>&#160;&#160;&#160;(1U &lt;&lt; 31U)</td></tr>
<tr class="memdesc:gaa36ee96f0b6371026d93d658d9993262"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF iterative convergence mask.  <a href="#gaa36ee96f0b6371026d93d658d9993262">More...</a><br/></td></tr>
<tr class="separator:gaa36ee96f0b6371026d93d658d9993262"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae177f9329a2e1b1ca18101bcede5e8ce"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#gae177f9329a2e1b1ca18101bcede5e8ce">XPUF_PUF_KR_MASK</a>&#160;&#160;&#160;(1U &lt;&lt; 3U)</td></tr>
<tr class="memdesc:gae177f9329a2e1b1ca18101bcede5e8ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF Key ready mask.  <a href="#gae177f9329a2e1b1ca18101bcede5e8ce">More...</a><br/></td></tr>
<tr class="separator:gae177f9329a2e1b1ca18101bcede5e8ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga195a89fe38d4e810f356aeb626bfb964"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#ga195a89fe38d4e810f356aeb626bfb964">XPUF_PMC_GLOBAL_PUF_KEY_CAPTURE</a>&#160;&#160;&#160;(1U &lt;&lt; 2U)</td></tr>
<tr class="memdesc:ga195a89fe38d4e810f356aeb626bfb964"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF key capture mask.  <a href="#ga195a89fe38d4e810f356aeb626bfb964">More...</a><br/></td></tr>
<tr class="separator:ga195a89fe38d4e810f356aeb626bfb964"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad16dd5805786cdbf430a04e61c961185"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#gad16dd5805786cdbf430a04e61c961185">XPUF_PMC_GLOBAL_PUF_ID_CAPTURE</a>&#160;&#160;&#160;(1 &lt;&lt; 1U)</td></tr>
<tr class="memdesc:gad16dd5805786cdbf430a04e61c961185"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF ID capture mask.  <a href="#gad16dd5805786cdbf430a04e61c961185">More...</a><br/></td></tr>
<tr class="separator:gad16dd5805786cdbf430a04e61c961185"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1f9dc9c84263a6a89a73743530804ea4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#ga1f9dc9c84263a6a89a73743530804ea4">XPUF_KEY_GEN_ITERATIONS</a>&#160;&#160;&#160;6U</td></tr>
<tr class="memdesc:ga1f9dc9c84263a6a89a73743530804ea4"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF maximum key generation iterations to obtain PUF iterative convergence.  <a href="#ga1f9dc9c84263a6a89a73743530804ea4">More...</a><br/></td></tr>
<tr class="separator:ga1f9dc9c84263a6a89a73743530804ea4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga85df83a1be9b45df1b399abe4d76df1f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#ga85df83a1be9b45df1b399abe4d76df1f">XPUF_STATUS_MASK</a></td></tr>
<tr class="memdesc:ga85df83a1be9b45df1b399abe4d76df1f"><td class="mdescLeft">&#160;</td><td class="mdescRight">PUF status mask.  <a href="#ga85df83a1be9b45df1b399abe4d76df1f">More...</a><br/></td></tr>
<tr class="separator:ga85df83a1be9b45df1b399abe4d76df1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gae2607f20a8f0199c8f0eb53d0dfc9f0a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#gae2607f20a8f0199c8f0eb53d0dfc9f0a">XPuf_Registration</a> (XPuf_Data *PufData)</td></tr>
<tr class="memdesc:gae2607f20a8f0199c8f0eb53d0dfc9f0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">This functions performs PUF registration.  <a href="#gae2607f20a8f0199c8f0eb53d0dfc9f0a">More...</a><br/></td></tr>
<tr class="separator:gae2607f20a8f0199c8f0eb53d0dfc9f0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga2f60c4624b046d3f5c74d8cb01f8f90d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#ga2f60c4624b046d3f5c74d8cb01f8f90d">XPuf_Regeneration</a> (XPuf_Data *PufData)</td></tr>
<tr class="memdesc:ga2f60c4624b046d3f5c74d8cb01f8f90d"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function regenerates PUF data using helper data stored in eFUSE or external memory.  <a href="#ga2f60c4624b046d3f5c74d8cb01f8f90d">More...</a><br/></td></tr>
<tr class="separator:ga2f60c4624b046d3f5c74d8cb01f8f90d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga651bbcfe2834f71fa821e1cb113a723f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#ga651bbcfe2834f71fa821e1cb113a723f">XPuf_ClearPufID</a> (void)</td></tr>
<tr class="memdesc:ga651bbcfe2834f71fa821e1cb113a723f"><td class="mdescLeft">&#160;</td><td class="mdescRight">This function clears PUF ID.  <a href="#ga651bbcfe2834f71fa821e1cb113a723f">More...</a><br/></td></tr>
<tr class="separator:ga651bbcfe2834f71fa821e1cb113a723f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gad039d7cf5b8f0575f1e4d31fd6c30ef6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__xpuf__apis.html#gad039d7cf5b8f0575f1e4d31fd6c30ef6">XPuf_TrimPufData</a> (XPuf_Data *PufData)</td></tr>
<tr class="memdesc:gad039d7cf5b8f0575f1e4d31fd6c30ef6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Converts the PUF Syndrome data to eFUSE writing format.  <a href="#gad039d7cf5b8f0575f1e4d31fd6c30ef6">More...</a><br/></td></tr>
<tr class="separator:gad039d7cf5b8f0575f1e4d31fd6c30ef6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="ga4d7d5a3b73fb92f6f65e2a2205b74195"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_AUX_MASK_VALUE&#160;&#160;&#160;(0x0FFFFFF0U)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Mask value for AUX. </p>

<p>Referenced by <a class="el" href="group__xpuf__apis.html#gae2607f20a8f0199c8f0eb53d0dfc9f0a">XPuf_Registration()</a>.</p>

</div>
</div>
<a class="anchor" id="ga1f9dc9c84263a6a89a73743530804ea4"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_KEY_GEN_ITERATIONS&#160;&#160;&#160;6U</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>PUF maximum key generation iterations to obtain PUF iterative convergence. </p>

</div>
</div>
<a class="anchor" id="ga5a9afe10c38f97cc7f9793a02463c131"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_OV_MASK_VALUE&#160;&#160;&#160;(0x30000000U)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Mask value for overflow. </p>

<p>Referenced by <a class="el" href="group__xpuf__apis.html#gae2607f20a8f0199c8f0eb53d0dfc9f0a">XPuf_Registration()</a>.</p>

</div>
</div>
<a class="anchor" id="gad16dd5805786cdbf430a04e61c961185"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_PMC_GLOBAL_PUF_ID_CAPTURE&#160;&#160;&#160;(1 &lt;&lt; 1U)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>PUF ID capture mask. </p>

<p>Referenced by <a class="el" href="group__xpuf__apis.html#gae2607f20a8f0199c8f0eb53d0dfc9f0a">XPuf_Registration()</a>.</p>

</div>
</div>
<a class="anchor" id="ga195a89fe38d4e810f356aeb626bfb964"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_PMC_GLOBAL_PUF_KEY_CAPTURE&#160;&#160;&#160;(1U &lt;&lt; 2U)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>PUF key capture mask. </p>

<p>Referenced by <a class="el" href="group__xpuf__apis.html#gae2607f20a8f0199c8f0eb53d0dfc9f0a">XPuf_Registration()</a>.</p>

</div>
</div>
<a class="anchor" id="gad94270d88964f053f5b2d36349ce70a1"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_PUF_AUX_ENABLE&#160;&#160;&#160;(0xFU)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>PUF aux enable. </p>

</div>
</div>
<a class="anchor" id="gaa36ee96f0b6371026d93d658d9993262"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_PUF_IC_MASK&#160;&#160;&#160;(1U &lt;&lt; 31U)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>PUF iterative convergence mask. </p>

</div>
</div>
<a class="anchor" id="gae177f9329a2e1b1ca18101bcede5e8ce"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_PUF_KR_MASK&#160;&#160;&#160;(1U &lt;&lt; 3U)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>PUF Key ready mask. </p>

</div>
</div>
<a class="anchor" id="ga4f2ca82dfad78d3aa3ec21f1485031de"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_RESET_VAL&#160;&#160;&#160;(1U)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>PUF reset value. </p>

</div>
</div>
<a class="anchor" id="ga2ef4268fecfb9ad20b85bbb41205945f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_SET_VAL&#160;&#160;&#160;(0U)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>PUF set value. </p>

</div>
</div>
<a class="anchor" id="ga85df83a1be9b45df1b399abe4d76df1f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_STATUS_MASK</td>
        </tr>
      </table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line">(XPUF_STATUS_SYNDROME_WORD_RDY | XPUF_STATUS_KEY_RDY | <a class="code" href="group__xpuf__apis.html#ga4d7d5a3b73fb92f6f65e2a2205b74195">\</a></div>
<div class="line"><a class="code" href="group__xpuf__apis.html#ga4d7d5a3b73fb92f6f65e2a2205b74195">							XPUF_AUX_MASK_VALUE</a> | <a class="code" href="group__xpuf__apis.html#ga5a9afe10c38f97cc7f9793a02463c131">XPUF_OV_MASK_VALUE</a>)</div>
<div class="ttc" id="group__xpuf__apis_html_ga5a9afe10c38f97cc7f9793a02463c131"><div class="ttname"><a href="group__xpuf__apis.html#ga5a9afe10c38f97cc7f9793a02463c131">XPUF_OV_MASK_VALUE</a></div><div class="ttdeci">#define XPUF_OV_MASK_VALUE</div><div class="ttdoc">Mask value for overflow. </div><div class="ttdef"><b>Definition:</b> spartanup/xpuf.c:41</div></div>
<div class="ttc" id="group__xpuf__apis_html_ga4d7d5a3b73fb92f6f65e2a2205b74195"><div class="ttname"><a href="group__xpuf__apis.html#ga4d7d5a3b73fb92f6f65e2a2205b74195">XPUF_AUX_MASK_VALUE</a></div><div class="ttdeci">#define XPUF_AUX_MASK_VALUE</div><div class="ttdoc">Mask value for AUX. </div><div class="ttdef"><b>Definition:</b> spartanup/xpuf.c:39</div></div>
</div><!-- fragment -->
<p>PUF status mask. </p>

</div>
</div>
<a class="anchor" id="ga8eda4f7307742eae0ea34465e43d2555"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define XPUF_STATUS_WAIT_TIMEOUT&#160;&#160;&#160;(1000000U)</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Recommended software timeout is 1 second. </p>

<p>Referenced by <a class="el" href="group__xpuf__apis.html#ga651bbcfe2834f71fa821e1cb113a723f">XPuf_ClearPufID()</a>.</p>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a class="anchor" id="ga651bbcfe2834f71fa821e1cb113a723f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int XPuf_ClearPufID </td>
          <td>(</td>
          <td class="paramtype">void&#160;</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function clears PUF ID. </p>
<dl class="section return"><dt>Returns</dt><dd><ul>
<li>XST_SUCCESS if PUF ID is cleared successfully</li>
<li>XPUF_ERROR_PUF_ID_ZERO_TIMEOUT if timedout while clearing PUF ID </li>
</ul>
</dd></dl>
<p>Set least significant bit in the PUF_CLEAR register.</p>
<p>The API waits for ID_ZERO bit to be set in PUF Status register. If id zero bit is not set within 1 second then returns XPUF_ERROR_PUF_ID_ZERO_TIMEOUT else returns XST_SUCCESS.</p>

</div>
</div>
<a class="anchor" id="ga2f60c4624b046d3f5c74d8cb01f8f90d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int XPuf_Regeneration </td>
          <td>(</td>
          <td class="paramtype">XPuf_Data *&#160;</td>
          <td class="paramname"><em>PufData</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This function regenerates PUF data using helper data stored in eFUSE or external memory. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">PufData</td><td>Pointer to XPuf_Data structure which includes options to configure PUF.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><ul>
<li>XST_SUCCESS PUF key regeneration successful</li>
<li>XPUF_ERROR_SYNDROME_WORD_WAIT_TIMEOUT Timeout occurred while waiting for PUF Syndrome data</li>
<li>XPUF_ERROR_KEY_NOT_CONVERGED When PUF key is not converged</li>
<li>XST_FAILURE Unexpected event </li>
</ul>
</dd></dl>
<p>Run PUF regeneration through iterative convergence</p>

</div>
</div>
<a class="anchor" id="gae2607f20a8f0199c8f0eb53d0dfc9f0a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int XPuf_Registration </td>
          <td>(</td>
          <td class="paramtype">XPuf_Data *&#160;</td>
          <td class="paramname"><em>PufData</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>This functions performs PUF registration. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">PufData</td><td>Pointer to XPuf_Data structure which includes options to configure PUF.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><ul>
<li>XST_SUCCESS PUF registration successful</li>
<li>XPUF_ERROR_INVALID_PARAM PufData is NULL</li>
<li>XPUF_ERROR_SYNDROME_WORD_WAIT_TIMEOUT Timeout occurred while waiting for PUF Syndrome data</li>
<li>XPUF_ERROR_PUF_OVERFLOW When PUF overflow error has occured</li>
<li>XPUF_ERROR_SYN_DATA_ERROR Error when syndrome data is not generated properly</li>
<li>XST_FAILURE Unexpected event</li>
</ul>
</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Helper data will be available in PufData-&gt;SyndromeData, PufData-&gt;Chash, PufData-&gt;Aux </dd></dl>
<p>Issue PUF command</p>
<p>PUF helper data includes Syndrome data, CHash and Auxiliary data. Capturing Syndrome data word by word.</p>
<p>Once complete Syndrome data is captured and PUF operation is done, read CHash, Auxiliary data and PUF ID.</p>
<p>Check for overflow and return XPUF_ERROR_PUF_OVERFLOW incase of error </p>

</div>
</div>
<a class="anchor" id="gad039d7cf5b8f0575f1e4d31fd6c30ef6"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int XPuf_TrimPufData </td>
          <td>(</td>
          <td class="paramtype">XPuf_Data *&#160;</td>
          <td class="paramname"><em>PufData</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Converts the PUF Syndrome data to eFUSE writing format. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">PufData</td><td>Pointer to XPuf_Data structure which includes options to configure PUF.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><ul>
<li>XST_SUCCESS Syndrome data is successfully trimmed</li>
<li>XPUF_ERROR_INVALID_PARAM PufData instance pointer is NULL</li>
</ul>
</dd></dl>
<dl class="section note"><dt>Note</dt><dd>Formatted data will be available at PufData-&gt;TrimmedSynData </dd></dl>
<p>Check if PufData instance pointer is NULL. If NULL, return XPUF_ERROR_INVALID_PARAM.</p>
<p>Copy syndrome data from instance pointer to a local variable.</p>
<p>Trimming logic for PUF Syndrome Data:</p>
<p>Space allocated in eFUSE for syndrome data = 4060bits</p>
<p>eFUSE02 - 2032bits</p>
<p>eFUSE03 - 2028bits</p>
<p>PUF Helper data generated for 4K Mode through registration is 140 Words = 140*32 = 4480 bits. Remove lower 12 bits of every fourth word of syndrome data.</p>
<p>After removing these bits remaining syndrome data will be exactly 4060bits which will fit into eFUSE.</p>
<h2>Illustration: </h2>
<p>454D025B</p>
<p>CDCB36FC</p>
<p>EE1FE4C5</p>
<p>3FE53F74 &ndash;&gt; F74 has to removed &amp; next word upper 12 bits have to be shifted here</p>
<p>3A0AE7F8</p>
<p>2373F03A</p>
<p>C83188AF</p>
<p>3A5EB687&ndash;&gt; 687 has to be removed</p>
<p>B83E4A1D</p>
<p>D53B5C50</p>
<p>FA8B33D9</p>
<p>07EEFF43 &ndash;&gt; F43 has to be removed</p>
<p>CD01973F</p>
<p>........</p>
<p>........</p>
<p>........</p>
<p>Use the above mentioned logic to trim the data and copy the trimmed data in TrimmedSynData array in the instance pointer. and return XST_SUCCESS.</p>

</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
	<p class="footer">&copy; Copyright 2015-2022 Xilinx, Inc. All Rights Reserved.</p>
	<p class="footer">&copy; Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.</p>
</div>
</body>
</html>
